﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using AutoMapper;

namespace DAO
{
    public class NhanVienRepository
    {
        public NHAN_VIEN CreateNhanVienEFFromNhanVienDTO(NhanVienDTO nhanvienDTO)
        {
            NHAN_VIEN nhanvienEF = new NHAN_VIEN();
            Mapper.CreateMap<NhanVienDTO, NHAN_VIEN>();
            nhanvienEF = Mapper.Map<NhanVienDTO, NHAN_VIEN>(nhanvienDTO);
            return nhanvienEF;
        }

        public NhanVienDTO CreateNhanVienDTOFromNhanVienEF(NHAN_VIEN nhanvienEF)
        {
            NhanVienDTO nhanvienDTO = new NhanVienDTO();
            Mapper.CreateMap<NHAN_VIEN, NhanVienDTO>();
            nhanvienDTO = Mapper.Map<NHAN_VIEN, NhanVienDTO>(nhanvienEF);
            return nhanvienDTO;
        }

        public List<NhanVienDTO> LayDanhSachNhanVien()
        {
            List<NhanVienDTO> list = new List<NhanVienDTO>();
            try
            {
                QLTVEntities contex = ContextFactory.GetInstance();
                var query = from nhanvien in contex.NHAN_VIENList
                            select nhanvien;
                foreach(var nhanvienEF in query)
                {
                    NhanVienDTO nhanvienDTO = CreateNhanVienDTOFromNhanVienEF(nhanvienEF);
                    list.Add(nhanvienDTO);
                }
            }
            catch (System.Exception)
            {
            }
            return list;
        }

        public void ThemNhanVien(NhanVienDTO nhanvienDTO)
        {
            try
            {
                QLTVEntities contex = ContextFactory.GetInstance();
                NHAN_VIEN nhanvienEF = CreateNhanVienEFFromNhanVienDTO(nhanvienDTO);
                contex.AddToNHAN_VIENList(nhanvienEF);
                contex.SaveChanges();
            }
            catch (System.Exception)
            {
            }
        }

        public int LayMaNhanVienMax()
        {
            QLTVEntities context = ContextFactory.GetInstance();
            int maNV = context.NHAN_VIENList.Max(s => s.MaNV);

            return maNV;
        }

        public void DoiMatKhau(NhanVienDTO nhanvienDTO)
        {
            try
            {
                QLTVEntities contex = ContextFactory.GetInstance();
                NHAN_VIEN nhanvienEF = new NHAN_VIEN();
                nhanvienEF.MatKhau = nhanvienDTO.MatKhau;
                contex.AddToNHAN_VIENList(nhanvienEF);
                contex.SaveChanges();
            }
            catch (System.Exception)
            {
            }
        }

        public NhanVienDTO LayThongTinNhanVienTheoMaNV(int maNV)
        {
            NhanVienDTO nvDTO = new NhanVienDTO();
            try
            {
                QLTVEntities context = ContextFactory.GetInstance();
                var query = from nv in context.NHAN_VIENList
                            where nv.MaNV == maNV
                            select nv;
                NHAN_VIEN nvTemp = query.First();
                if(nvTemp != null)
                {
                    nvDTO = CreateNhanVienDTOFromNhanVienEF(nvTemp);
                }
            }
            catch (System.Exception )
            {
            	
            }
            return nvDTO;
        }

        public int LayMaNVTheoMaSoNV(string masoNV)
        {
            QLTVEntities context = ContextFactory.GetInstance();
            var query = from nv in context.NHAN_VIENList
                        where nv.MaTheNV == masoNV
                        select nv;
            NHAN_VIEN nvTemp = query.First();
            int maNV = nvTemp.MaNV;
            return maNV;
        }

        public NhanVienDTO LayThongTinNhanVienTheoMaSoNV(string maso)
        {
            NhanVienDTO nvDTO = new NhanVienDTO();
            try
            {
                QLTVEntities context = ContextFactory.GetInstance();
                var query = from nv in context.NHAN_VIENList
                            where nv.MaTheNV == maso
                            select nv;
                NHAN_VIEN nvTemp = query.First();
                if (nvTemp != null)
                {
                    nvDTO = CreateNhanVienDTOFromNhanVienEF(nvTemp);
                }
            }
            catch (System.Exception)
            {

            }
            return nvDTO;
        }

        public void CapNhatNhanVien(NhanVienDTO nvDTO)
        {
            //try
            //{
            QLTVEntities contex = new QLTVEntities();
                NHAN_VIEN nvEF = CreateNhanVienEFFromNhanVienDTO(nvDTO);
                contex.NHAN_VIENList.ApplyCurrentValues(nvEF);
                contex.SaveChanges();
            //}
            //catch (System.Exception)
            //{
            //}
        }
    }
}
